import requests,json
import pandas as pd

def geocode(key,address)-> str:    # geocode(高德API_key，结构化地址)
    """获取高德API的地理编码
    注释：key是指高德API的密钥，请先去注册
          address是指结构化地址，具体请查看：
    """         # 函数注释
    url = 'https://restapi.amap.com/v3/geocode/geo?parameters'
    params = {
        'key':key,
        'address':address 
    }
    r = requests.get(url,params=params)
    results = r.json()['geocodes'][0]['location']
    # 返回值
    return results

# 高德地图——逆地理编码：将经纬度转换为详细结构化的地址，且返回附近周边的POI、AOI信息
def regeocode(key,location,poitype = None,radius='100',extensions='all',batch='false',roadlevel=None,sig=None,output='json',callback=None,homeorcorp='0'):
        """获取高德API的逆地理编码
        注释：key是指高德API的密钥，请先去注册
            location是结构化地址的经纬度，获取经纬度请调用geo模块中的函数geocode
        """
        url = 'https://restapi.amap.com/v3/geocode/regeo?parameters'
        params = {
        'key':key,
        'location':location,
        # extensions 参数默认取值是 base，也就是返回基本地址信息；
        # extensions 参数取值为 all 时会返回基本地址信息、附近 POI 内容、道路信息以及道路交叉口信息。
        'extensions':'all',
        'output':'json'
        }
        r = requests.get(url,params=params)
        results = r.json()['regeocode']['roads']
        return results

def walking(key,origin,destination,sig = None,output = 'json',callback = None):
        """
        walking函数用于获取起始点到目的地间的步行路径
        在walking函数的参数中，key是指高德API的密钥，请先去注册；
        orgin为出发点，destination为目的地，这两个参数值必须为结构化地址的经纬度，获取经纬度请调用geo模块中的函数geocode
        """
        url = 'https://restapi.amap.com/v3/direction/walking?parameters'
        params = {
            'key':key,
            'origin':origin,
            'destination':destination,
            'output':'json'
        }

        r = requests.get(url,params=params)
        results = r.json()['route']['paths'][0]['steps']
        return pd.json_normalize(r.json()['route']['paths'][0]['steps'])     #将所得数据中的路段步行指示表格化

def integrated(key,origin,destination,city,cityd = None,extensions = 'base',strategy = 0,nightflag = 0,date = None,time= None,sig= None,output = 'json',callback = None):
    """
    transit函数用于规划综合各类公共（火车、公交、地铁）交通方式的通勤方案，并且返回通勤方案的数据。
    在transit函数的参数中，key是指高德API的密钥，请先去注册；
        orgin为出发点，destination为目的地，这两个参数值必须为结构化地址的经纬度，获取经纬度请调用geo模块中的函数geocode；
        city可选值有城市名称/citycode；cityd为跨城公交规划必填参数，可选值有城市名称/citycode；
        strategy为公交换乘策略，其中可选值：
                                0：最快捷模式
                                1：最经济模式
                                2：最少换乘模式
                                3：最少步行模式
                                5：不乘地铁模式
        nightflag为是否计算夜班车，其中可选值：0：不计算夜班车，1：计算夜班车
    """
    url = 'https://restapi.amap.com/v3/direction/transit/integrated?parameters'
    params = {
        'key':key,
        'origin':origin,
        'destination':destination,
        'city':city,
        'output':'json'
    }
    r = requests.get(url,params=params)
    results = r.json()['route']['transits'][0]['segments']
    return results

def place(key,keywords,types=None,city=None,citylimit='false',children=0,offset=20,page=1,extensions='base',sig=None,output='json',callback=None):
    """
    place函数提供多种查询POI信息的能力，其中包括关键字搜索、周边搜索、多边形搜索、ID查询四种筛选机制。
    在place函数中，key是指高德API的密钥，请先去注册；
    必填(keywords和types两者至少必选其一)
    """
    url = 'https://restapi.amap.com/v3/place/text?parameters'
    params = {
        'key':key,
        'keywords':keywords
    }
    r = requests.get(url,params)
    results = r.json()
    return results

def ip(key,ip = None,sig = None,output = 'json'):
    """
    IP定位是一个简单的HTTP接口，根据用户输入的IP地址，能够快速的帮用户定位IP的所在位置。
    在ip函数中，key是指高德API的密钥，请先去注册；
    其中参数ip为需要搜索的IP地址（仅支持国内）若用户不填写IP，则取客户http之中的请求来进行定位
    """
    url = 'https://restapi.amap.com/v3/ip?parameters'
    params = {
        'key':key,
        'output':'json'
    }
    r = requests.get(url,params)
    results = r.json()
    return results


from PIL import Image
from io import BytesIO

def staticmap(key,location,zoom):
    """
    静态地图服务通过返回一张地图图片响应HTTP请求，使用户能够将高德地图以图片形式嵌入自己的网页中。用户可以指定请求的地图位置、图片大小、以及在地图上添加覆盖物，如标签、标注、折线、多边形。
    其中，参数location为地图中心点，规则：经度和纬度用","分隔 经纬度小数点后不得超过6位。
              zoom为地图级别，地图缩放级别[1,17]
    """
    url = 'https://restapi.amap.com/v3/staticmap?parameters'
    params = {
        'key':chen_key,
        'location':location,
        'zoom':zoom
    }
    r = requests.get(url,params = params)
    results = Image.open(BytesIO(r.content))
    return results


import requests,json
import pandas as pd

def convert(key,locations,coordsys= 'autonavi',sig = None,output = 'json'):
    """
    坐标转换是一类简单的HTTP接口，能够将用户输入的非高德坐标（GPS坐标、mapbar坐标、baidu坐标）转换成高德坐标。
    在convert函数中，key是指高德API的密钥，请先去注册；
    其中参数locations为坐标点，经度和纬度用","分割，经度在前，纬度在后，经纬度小数点后不得超过6位。多个坐标对之间用”|”进行分隔最多支持40对坐标。
            coordsys为原坐标系，可选值：
                                        gps;
                                        mapbar;
                                        baidu;
                                        autonavi(不进行转换)
    """
    url = 'https://restapi.amap.com/v3/assistant/coordinate/convert?parameters'
    params = {
        'key':key,
        'locations':locations,
        'output':'json'
    }
    r = requests.get(url,params)
    results = r.json()
    return results

def weather(key,city,extensions='all',output = 'json'):
    """
    天气查询是一个简单的HTTP接口，根据用户输入的adcode，查询目标区域当前/未来的天气情况。
    在weather函数中，key是指高德API的密钥，请先去注册;
    其中，参数city为城市编码，输入城市的adcode，adcode信息可参考城市编码表https://lbs.amap.com/api/webservice/download；
              extensions为气象类型，可选值：base/all
                                            base:返回实况天气
                                            all:返回预报天气
    """
    url = 'https://restapi.amap.com/v3/weather/weatherInfo?parameters'
    params = {
        'key':key,
        'city':city,
        'extensions' : 'all',
        'output':'json'
    }
    r = requests.get(url,params)
    results = r.json()['forecasts'][0]['casts']
    return pd.json_normalize(results)

def inputtips(key,keywords,type = None,location= None,city= None,citylimit = 'false',datatype = 'all',sig = None,output = 'json',callback = None):
    """
    输入提示是一类简单的HTTP接口，提供根据用户输入的关键词查询返回建议列表。
    其中，inputtips函数中的参数查询关键词keywords
    """
    url = 'https://restapi.amap.com/v3/assistant/inputtips?parameters'
    params = {
        'key':key,
        'keywords':keywords,
        'citylimit':'false',
        'datatype':'all',
        'output':'json'
    }
    r = requests.get(url,params)
    results = r.json()['tips']
    return pd.json_normalize(results)


